home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 18 / CU Amiga Magazine's Super CD-ROM 18 (1997)(EMAP Images)(GB)[!][issue 1998-01].iso / CUCD / Utilities / Commodities / Yak / Source / Prefs / BGUI / Root_window.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-11-29  |  31.9 KB  |  683 lines

  1. /************************************************************************
  2. **************************  BGUI ROOT WINDOW  ***************************
  3. ************************************************************************/
  4.  
  5.  
  6. #define __USE_SYSBASE
  7.  
  8. #include <exec/memory.h>
  9. #include <exec/types.h>
  10. #include <intuition/intuition.h>
  11. #include <intuition/classes.h>
  12. #include <intuition/classusr.h>
  13. #include <intuition/imageclass.h>
  14. #include <intuition/gadgetclass.h>
  15. #include <libraries/bgui.h>
  16. #include <libraries/bgui_macros.h>
  17. #include <libraries/asl.h>
  18. #include <workbench/workbench.h>
  19. #include <proto/exec.h>
  20. #include <proto/dos.h>
  21. #include <proto/intuition.h>
  22. #include <proto/bgui.h>
  23. #include <proto/icon.h>
  24. #include <proto/wb.h>
  25. #include <proto/asl.h>
  26. #include <clib/alib_protos.h>
  27. #include <string.h>
  28. #include <stdlib.h>
  29.  
  30. #include "code.h"
  31. #include "version.h"
  32. #include "yak.h"
  33. #include "hotkey_types.h"
  34. #include "gui.h"
  35. #include "filereq.h"
  36. #include "Requesters.h"
  37. #include "Settings.h"
  38. #include "Root_Window.h"
  39. #include "Root_Menus.h"
  40.  
  41. #define CATCOMP_NUMBERS
  42. #include "locale/yak_locale_strings.h"
  43.  
  44. /************************************************************************
  45. *****************************  REFERENCES  ******************************
  46. ************************************************************************/
  47.  
  48. IMPORT LONG (*HandleReturnID)(LONG ID);
  49. IMPORT BOOL CreateIcons;
  50. IMPORT char *ProgramName;
  51. IMPORT char *PrefsFile;
  52. IMPORT char *PrefsHelp;
  53. IMPORT struct NotifyRequest NotifyRequest;
  54.  
  55. /************************************************************************
  56. *****************************  LOCAL DATA  ******************************
  57. ************************************************************************/
  58.  
  59. struct Window   *RootWnd = NULL;
  60. Object                  *RootWndObj = NULL;
  61. Object                  *RootObjects[Root_CNT];
  62. UBYTE                   *RootWdt;
  63. struct IBox             RootBox;
  64. BOOL                    RootBoxValid = FALSE;
  65. BOOL                    RootWdi = FALSE;
  66.  
  67. /************************************************************************
  68. *************************  CREATEROOTWINDOW()  **************************
  69. *************************************************************************
  70. * Create the root window object tree. Returns the window object ptr or
  71. * NULL if create failed. Gadgets are initialised with default values,
  72. * InitRootGadgets must be called after window opened to reflect current
  73. * settings.
  74. *
  75. *************************************************************************/
  76.  
  77. APTR CreateRootWindow(VOID)
  78. {
  79. Object  *obj,*indicobj;
  80.  
  81. /* maplist: converts slider level tag to indicator level tag */
  82. static struct TagItem SliderToIndicMap[] = {
  83.         SLIDER_Level, INDIC_Level, TAG_DONE
  84. };
  85.  
  86. obj = WindowObject,
  87.         WINDOW_PubScreenName, PubScreenName,
  88.         WINDOW_Title,           RootWdt,
  89.         WINDOW_ScreenTitle,     getString(COPYRIGHT_STRING),
  90.         WINDOW_SmartRefresh, TRUE,
  91.         WINDOW_SizeBottom,      FALSE,                  /* put size gadget in right border */
  92.         WINDOW_SizeRight,       TRUE,
  93.         WINDOW_AutoAspect,      TRUE,                   /* automatic edges pixel width */
  94.         WINDOW_Position,        POS_CENTERMOUSE,
  95.         (RootBoxValid ? WINDOW_Bounds : TAG_IGNORE), &RootBox,
  96.         WINDOW_AppWindow,       TRUE,                   /* make it an appwindow */
  97.         WINDOW_MenuStrip,       RootNewMenu,
  98.         WINDOW_CloseGadget,     FALSE,
  99.         (TextFont ? WINDOW_Font : TAG_IGNORE),  &Attr,  /* use font if specified */
  100.         WINDOW_HelpFile,        PrefsHelp,              /* online help system */
  101.         WINDOW_HelpNode,        "MainWindow",
  102.         WINDOW_MasterGroup,
  103.                 VGroupObject, Spacing(4), HOffset(4), VOffset(4),
  104.                         StartMember,
  105.                                 /* windows activation group */
  106.                                 HGroupObject, Spacing(24), HOffset(6), VOffset(4),
  107.                                                 /* add frame & title to Windows Activation group */
  108.                                                 NeXTFrame,
  109.                                                 FRM_Title,              getString(WINDOWS_ACTIVATE_STRING),
  110.                                                 FRM_Flags,              FRF_EDGES_ONLY|FRF_CENTER_TITLE|FRF_HIGHLIGHT_TITLE,
  111.                                         StartMember,
  112.                                                 VGroupObject, Spacing(2),
  113.                                                         StartMember,
  114.                                                                 CH_KeyActivate = CheckBoxObject,
  115.                                                                         LAB_Label,              getString(KEY_ACTIVATE_STRING),
  116.                                                                         LAB_Place,              PLACE_RIGHT,
  117.                                                                         GA_ID,                  GD_KeyActCheck,
  118.                                                                         ButtonFrame,
  119.                                                                         FRM_Flags,              FRF_EDGES_ONLY,
  120.                                                                 EndObject, FixMinWidth,
  121.                                                         EndMember,
  122.                                                         VarSpace(DEFAULT_WEIGHT/10),
  123.                                                         StartMember,
  124.                                                                 CH_MMBActivate = CheckBoxObject,
  125.                                                                         LAB_Label,              getString(MMB_ACTIVATE_STRING),
  126.                                                                         LAB_Place,              PLACE_RIGHT,
  127.                                                                         GA_ID,                  GD_MMBActCheck,
  128.                                                                         ButtonFrame,
  129.                                                                         FRM_Flags,              FRF_EDGES_ONLY,
  130.                                                                 EndObject, FixMinWidth,
  131.                                                         EndMember,
  132.                                                         VarSpace(DEFAULT_WEIGHT/10),
  133.                                                         StartMember,
  134.                                                                 CH_RMBActivate = CheckBoxObject,
  135.                                                                         LAB_Label,              getString(RMB_ACTIVATE_STRING),
  136.                                                                         LAB_Place,              PLACE_RIGHT,
  137.                                                                         GA_ID,                  GD_RMBActCheck,
  138.                                                                         ButtonFrame,
  139.                                                                         FRM_Flags,              FRF_EDGES_ONLY,
  140.                                                                 EndObject, FixMinWidth,
  141.                                                         EndMember,
  142.                                                 EndObject,
  143.                                         EndMember,
  144.                                         StartMember,
  145.                                                 VGroupObject, Spacing(2),
  146.                                                         StartMember,
  147.                                                                 CH_AutoPoint = CheckBoxObject,
  148.                                                                         LAB_Label,              getString(AUTOPOINT_STRING),
  149.                                                                         LAB_Place,              PLACE_RIGHT,
  150.                                                                         GA_ID,                  GD_AutoCheck,
  151.                                                                         ButtonFrame,
  152.                                                                         FRM_Flags,              FRF_EDGES_ONLY,
  153.                                                                 EndObject, FixMinWidth,
  154.                                                         EndMember,
  155.                                                         VarSpace(DEFAULT_WEIGHT/10),
  156.                                                         StartMember,
  157.                                                                 STR_AutoScreen = StringObject,
  158.                                                                         LAB_Label,              getString(AUTOSCREENS_STRING),
  159.                                                                         RidgeFrame,
  160.                                                                         STRINGA_MaxChars,99,
  161.                                                                         STRINGA_MinCharsVisible,12,
  162.                                                                         GA_ID,                  GD_AutoPat,
  163.                                                                         GA_TabCycle,    TRUE,
  164.                                                                 EndObject,
  165.                                                         EndMember,
  166.                                                         VarSpace(DEFAULT_WEIGHT/10),
  167.                                                         StartMember,
  168.                                                                 HGroupObject, Spacing(2),
  169.                                                                         StartMember,
  170.                                                                                 SL_AutoPointDelay = SliderObject,
  171.                                                                                         LAB_Label,              getString(AUTOPOINT_DELAY_STRING),
  172.                                                                                         SLIDER_Min,             0,
  173.                                                                                         SLIDER_Max,             5,
  174.                                                                                         SLIDER_Level,   0,
  175.                                                                                         GA_ID,                  GD_AutoPointDelay,
  176.                                                                                 EndObject,
  177.                                                                         EndMember,
  178.                                                                         StartMember,
  179.                                                                                 indicobj = IndicatorObject,
  180.                                                                                         INDIC_Min,              0,
  181.                                                                                         INDIC_Max,              5,
  182.                                                                                         INDIC_Level,    0,
  183.                                                                                         INDIC_FormatString,"%1lu",
  184.                                                                                         INDIC_Justification,IDJ_CENTER,
  185.                                                                                 EndObject, Weight(DEFAULT_WEIGHT/10),
  186.                                                                         EndMember,
  187.                                                                 EndObject,
  188.                                                         EndMember,
  189.                                                 EndObject,
  190.                                         EndMember,
  191.                                 EndObject, Weight(DEFAULT_WEIGHT*3),
  192.                         EndMember,
  193.                         VarSpace(DEFAULT_WEIGHT/10),
  194.                         StartMember,
  195.                                 HGroupObject, Spacing(2),
  196.                                         StartMember,
  197.                                                 /* screens activation group */
  198.                                                 VGroupObject, /*Spacing(2), */HOffset(6), VOffset(4),
  199.                                                                 /* add frame & title to screens activation group */
  200.                                                                 NeXTFrame,
  201.                                                                 FRM_Title,              getString(SCREEN_ACTIVATE_STRING),
  202.                                                                 FRM_Flags,              FRF_EDGES_ONLY|FRF_CENTER_TITLE|FRF_HIGHLIGHT_TITLE,
  203.                                                         StartMember,
  204.                                                                 CH_ScreensActivation = CheckBoxObject,
  205.                                                                         LAB_Label,              getString(SCREEN_ACTIVATE_STRING),
  206.                                                                         LAB_Place,              PLACE_RIGHT,
  207.                                                                         GA_ID,                  GD_ScrActCheck,
  208.                                                                         ButtonFrame,
  209.                                                                         FRM_Flags,              FRF_EDGES_ONLY,
  210.                                                                 EndObject, FixMinWidth,
  211.                                                         EndMember,
  212.                                                         VarSpace(DEFAULT_WEIGHT*11/10),
  213.                                                 EndObject, Weight(DEFAULT_WEIGHT/3),
  214.                                         EndMember,
  215.                                         VarSpace(DEFAULT_WEIGHT/20),
  216.                                         StartMember,
  217.                                                 VGroupObject, Spacing(2),
  218.                                                         StartMember,
  219.                                                                 /* autopoptofront group */
  220.                                                                 VGroupObject, /*Spacing(2), */HOffset(6), VOffset(4),
  221.                                                                                 /* add frame & title to autopoptofront group */
  222.                                                                                 NeXTFrame,
  223.                                                                                 FRM_Title,              getString(AUTOPOPTOFRONT_STRING),
  224.                                                                                 FRM_Flags,              FRF_EDGES_ONLY|FRF_CENTER_TITLE|FRF_HIGHLIGHT_TITLE,
  225.                                                                         StartMember,
  226.                                                                                 CH_AutoPopToFront = CheckBoxObject,
  227.                                                                                         LAB_Label,              getString(AUTOPOPTOFRONT_STRING),
  228.                                                                                         LAB_Place,              PLACE_RIGHT,
  229.                                                                                         GA_ID,                  GD_AutoPopCheck,
  230.                                                                                         ButtonFrame,
  231.                                                                                         FRM_Flags,              FRF_EDGES_ONLY,
  232.                                                                                 EndObject, FixMinWidth,
  233.                                                                         EndMember,
  234.                                                                         VarSpace(DEFAULT_WEIGHT/10),
  235.                                                                         StartMember,
  236.                                                                                 STR_PopWindows = StringObject,
  237.                                                                                         LAB_Label,              getString(POPWINDOWS_STRING),
  238.                                                                                         RidgeFrame,
  239.                                                                                         STRINGA_MaxChars,99,
  240.                                                                                         STRINGA_MinCharsVisible,12,
  241.                                                                                         GA_ID,                  GD_PopPat,
  242.                                                                                         GA_TabCycle,    TRUE,
  243.                                                                                 EndObject,
  244.                                                                         EndMember,
  245.                                                                 EndObject,
  246.                                                         EndMember,
  247.                                                 EndObject,
  248.                                         EndMember,
  249.                                 EndObject, Weight(DEFAULT_WEIGHT*2),
  250.                         EndMember,
  251.                         VarSpace(DEFAULT_WEIGHT/10),
  252.                         StartMember,
  253.                                 HGroupObject, Spacing(2),
  254.                                         StartMember,
  255.                                                 BT_MouseCycling = Button(
  256.                                                                 getString(MOUSECYCLING_STRING),
  257.                                                                 GD_MouseCycling),
  258.                                         EndMember,
  259.                                         StartMember,
  260.                                                 BT_Blanking = Button(
  261.                                                                 getString(Blanking),
  262.                                                                 GD_Blanking),
  263.                                         EndMember,
  264.                                         StartMember,
  265.                                                 BT_DigitalClock = Button(
  266.                                                                 getString(DigitalClock),
  267.                                                                 GD_DigitalClock),
  268.                                         EndMember,
  269.                                 EndObject,
  270.                         EndMember,
  271.                         StartMember,
  272.                                 HGroupObject, Spacing(2),
  273.                                         StartMember,
  274.                                                 BT_EditHotkeys = Button(
  275.                                                                 getString(EDIT_HOTKEYS_STRING),
  276.                                                                 GD_EditHotkeys),
  277.                                         EndMember,
  278.                                         StartMember,
  279.                                                 BT_Miscellaneous = Button(
  280.                                                                 getString(MISCELLANEOUS_STRING),
  281.                                                                 GD_Miscellaneous),
  282.                                         EndMember,
  283.                                 EndObject,
  284.                         EndMember,
  285.                         VarSpace(DEFAULT_WEIGHT/10),
  286.                         StartMember,
  287.                                 HorizSeparator,
  288.                         EndMember,
  289.                         StartMember,
  290.                                 HGroupObject, Spacing(2),
  291.                                         StartMember,
  292.                                                 BT_Save = Button(getString(SAVE_STRING),GD_Save),
  293.                                         EndMember,
  294.                                         VarSpace(DEFAULT_WEIGHT/3),
  295.                                         StartMember,
  296.                                                 BT_Use = Button(getString(USE_STRING),GD_Use),
  297.                                         EndMember,
  298.                                         VarSpace(DEFAULT_WEIGHT/3),
  299.                                         StartMember,
  300.                                                 BT_Cancel = Button(getString(CANCEL_STRING),GD_Cancel0),
  301.                                         EndMember,
  302.                                 EndObject,
  303.                         EndMember,
  304.                 EndObject,
  305.         EndObject;
  306.  
  307. if (obj)
  308.         {
  309.         /* set tab cycle order between string gadgets */
  310.         DoMethod(obj,WM_TABCYCLE_ORDER,STR_AutoScreen,STR_PopWindows,NULL);
  311.  
  312.         /* add map from slider to its level indicator */
  313.         AddMap(SL_AutoPointDelay,indicobj,SliderToIndicMap);
  314.  
  315.         /* add conditional map: disables STR_AutoScreen and */
  316.         /* SL_AutoPointDelay when CH_AutoPoint is unchecked */
  317.         AddCondit(CH_AutoPoint,STR_AutoScreen,GA_Selected,TRUE,
  318.                 GA_Disabled,FALSE,GA_Disabled,TRUE);
  319.         AddCondit(CH_AutoPoint,SL_AutoPointDelay,GA_Selected,TRUE,
  320.                 GA_Disabled,FALSE,GA_Disabled,TRUE);
  321.  
  322.         /* add conditional map: disables STR_PopWindows */
  323.         /* when CH_AutoPopToFront is unchecked */
  324.         AddCondit(CH_AutoPopToFront,STR_PopWindows,GA_Selected,TRUE,
  325.                 GA_Disabled,FALSE,GA_Disabled,TRUE);
  326.         }
  327.  
  328. return(obj);
  329. }
  330.  
  331. /************************************************************************
  332. *************************  INITIALIZE GADGETS  **************************
  333. *************************************************************************
  334. * Initialize the root window gadgets to reflect current settings.
  335. *************************************************************************/
  336.  
  337. static void InitAutoPointGadgets(void)
  338. {
  339. InitWindowGadget(GDX_AutoPat, STRINGA_TextVal, (LONG)patterns[YP_AUTOSCR_PAT].patstr, ROOT_WINDOW);
  340. InitWindowGadget(GDX_AutoPat, GA_Disabled, !autopoint, ROOT_WINDOW);
  341.  
  342. InitWindowGadget(GDX_AutoPointDelay, SLIDER_Level, autopoint_delay, ROOT_WINDOW);
  343. InitWindowGadget(GDX_AutoPointDelay, GA_Disabled, !autopoint, ROOT_WINDOW);
  344. }
  345.  
  346. static void InitAutoPopGadgets(void)
  347. {
  348. InitWindowGadget(GDX_PopPat, STRINGA_TextVal, (LONG)patterns[YP_POPWIN_PAT].patstr, ROOT_WINDOW);
  349. InitWindowGadget(GDX_PopPat, GA_Disabled, !autopop, ROOT_WINDOW);
  350. }
  351.  
  352. static void InitRootGadgets(void)
  353. {
  354. InitToggleGadgets(ROOT_WINDOW);
  355. InitAutoPopGadgets();
  356. InitAutoPointGadgets();
  357. }
  358.  
  359. /************************************************************************
  360. **************************  CLOSEROOTWINDOW()  **************************
  361. *************************************************************************
  362. * Close the root window, disposing of the root window object.
  363. *
  364. *************************************************************************/
  365.  
  366. void CloseRootWindow(void)
  367. {
  368. if (RootWnd)
  369.         {
  370.         GetAttr(WINDOW_Bounds,RootWndObj,(ULONG *) &RootBox);
  371.         RootBoxValid = TRUE;
  372.         }
  373.  
  374. DisposeObject(RootWndObj);
  375. RootWndObj = NULL;
  376. RootWnd = NULL;
  377. }
  378.  
  379. /************************************************************************
  380. **************************  SHOWROOTWINDOW()  ***************************
  381. *************************************************************************
  382. * Create and open the root window and initialize the gadgets to reflect
  383. * current settings. Sets up HandleReturnID function, curwin, curwinobj
  384. * and curwinID. Returns TRUE or FALSE to indicate success.
  385. *
  386. *************************************************************************/
  387.  
  388. BOOL ShowRootWindow(void)
  389. {
  390. static char title[80];
  391.  
  392. if (!RootWdi)
  393. {
  394.     RootWdi = TRUE;
  395.  
  396.     strcpy(title, getString(Prefs_Window_TITLE));
  397.     strcat(title, " : ");
  398.     strcat(title,VERSION_NAME);
  399.     RootWdt = title;
  400.     InitRootNewMenu ();
  401. }
  402.  
  403. if (RootWndObj = (Object *)CreateRootWindow())
  404.         {
  405.         if (RootWnd = WindowOpen(RootWndObj))
  406.                 {
  407.                 InitRootGadgets();
  408.                 HandleReturnID = HandleRootReturnID;
  409.                 curwin = RootWnd;
  410.                 curwinobj = RootWndObj;
  411.                 curwinID = ROOT_WINDOW;
  412.                 return(TRUE);
  413.                 }
  414.         }
  415.  
  416. CloseRootWindow();
  417. curwin = NULL;
  418. curwinobj = NULL;
  419. wndsigflag = 0L;
  420. appwinsigflag = 0L;
  421. return(FALSE);
  422. }
  423.  
  424. /************************************************************************
  425. ************************  HANDLEROOTRETURNID()  *************************
  426. *************************************************************************
  427. * Handle msgs arriving at root window - supply the ID returned by BGUI.
  428. * Returns either RET_OKAY or RET_QUIT.
  429. *
  430. *************************************************************************/
  431.  
  432. LONG HandleRootReturnID(LONG id)
  433. {
  434. LONG    ret;
  435.  
  436. ret = RET_OKAY;
  437.  
  438. switch(id)
  439.         {
  440.         case GD_EditHotkeys:
  441.                 if (!SwitchFromRootWindow(HOTKEY_WINDOW))
  442.                         {
  443.                         PostError(getString(Couldnt_open_other_window_ERR));
  444.                         ret = RET_QUIT;
  445.                         }
  446.                 break;
  447.  
  448.         case GD_Miscellaneous:
  449.                 if (!SwitchFromRootWindow(MISC_WINDOW))
  450.                         {
  451.                         PostError(getString(Couldnt_open_other_window_ERR));
  452.                         ret = RET_QUIT;
  453.                         }
  454.                 break;
  455.  
  456.         case GD_Blanking:
  457.                 if (!SwitchFromRootWindow(BLANK_WINDOW))
  458.                         {
  459.                         PostError(getString(Couldnt_open_other_window_ERR));
  460.                         ret = RET_QUIT;
  461.                         }
  462.                 break;
  463.  
  464.         case GD_MouseCycling:
  465.                 if (!SwitchFromRootWindow(MCYCLING_WINDOW))
  466.                         {
  467.                         PostError(getString(Couldnt_open_other_window_ERR));
  468.                         ret = RET_QUIT;
  469.                         }
  470.                 break;
  471.  
  472.         case GD_DigitalClock:
  473.                 if (!SwitchFromRootWindow(DIGITALCLOCK_WINDOW))
  474.                         {
  475.                         PostError(getString(Couldnt_open_other_window_ERR));
  476.                         ret = RET_QUIT;
  477.                         }
  478.                 break;
  479.  
  480.  
  481.         case GD_AutoPat:
  482.                 NewPattern(GDX_AutoPat, &patterns[YP_AUTOSCR_PAT],
  483.                                 (struct Gadget *)STR_AutoScreen, ROOT_WINDOW);
  484.                 break;
  485.  
  486.         case GD_PopPat:
  487.                 NewPattern(GDX_PopPat, &patterns[YP_POPWIN_PAT],
  488.                                 (struct Gadget *)STR_PopWindows, ROOT_WINDOW);
  489.                 break;
  490.  
  491.         case GD_Save:
  492.                 DisableYakInterface();
  493.                 EndNotify(&NotifyRequest);
  494.                 SaveSettings(ENVARC_CONFIG_FILE);
  495.                 CopyFile(ENVARC_CONFIG_FILE, ENV_CONFIG_FILE);
  496.                 StartNotify(&NotifyRequest);
  497.                 EnableYakInterface();
  498.                 ret   = RET_QUIT;
  499.                 break;
  500.  
  501.         case GD_Use:
  502.                 DisableYakInterface();
  503.                 EndNotify(&NotifyRequest);
  504.                 SaveSettings(ENV_CONFIG_FILE);
  505.                 StartNotify(&NotifyRequest);
  506.                 ret   = RET_QUIT;
  507.                 break;
  508.  
  509.         case GD_Cancel0:
  510.                 ret   = RET_QUIT;
  511.                 break;
  512.  
  513.         case GD_AutoCheck: /* toggle */
  514.                 autopoint ^= TRUE;
  515.                 break;
  516.  
  517.         case GD_AutoPopCheck: /* toggle */
  518.                 autopop ^= TRUE;
  519.                 break;
  520.  
  521.         case GD_KeyActCheck: /* toggle */
  522.                 keyactivate ^= TRUE;
  523.                 break;
  524.  
  525.         case GD_ScrActCheck: /* toggle */
  526.                 scractivate ^= TRUE;
  527.                 break;
  528.  
  529.         case GD_RMBActCheck: /* toggle */
  530.                 rmbactivate ^= TRUE;
  531.                 break;
  532.  
  533.         case GD_MMBActCheck: /* toggle */
  534.                 mmbactivate ^= TRUE;
  535.                 break;
  536.  
  537.         case GD_AutoPointDelay:
  538.                 {
  539.                 ULONG   tmp;
  540.  
  541.                 GetAttr(SLIDER_Level,SL_AutoPointDelay,&tmp);
  542.                 autopoint_delay = tmp;
  543.                 }
  544.                 break;
  545.  
  546.         case MD_OPEN:
  547.                 {
  548.                 FileReqParams   frp;
  549.                 char                    *file;
  550.  
  551.                 frp.frp_Window      = curwin;
  552.                 frp.frp_Title       = getString(FILEREQ_LOAD_STRING);
  553.                 frp.frp_InitialFile = PrefsFile;
  554.                 frp.frp_Flag1       = 0L;
  555.  
  556.                 DisableYakInterface();
  557.                 if (file=OpenFileRequester(&frp))
  558.                         {
  559.                         LoadSettings(file);
  560.                         FreeVec(PrefsFile);
  561.                         PrefsFile = file;
  562.                         InitRootGadgets();
  563.                         }
  564.                 EnableYakInterface();
  565.                 }
  566.                 break;
  567.  
  568.         case MD_SAVE:
  569.                 DisableYakInterface();
  570.                 EndNotify(&NotifyRequest);
  571.                 SaveSettings(ENVARC_CONFIG_FILE);
  572.                 CopyFile(ENVARC_CONFIG_FILE, ENV_CONFIG_FILE);
  573.                 StartNotify(&NotifyRequest);
  574.                 EnableYakInterface();
  575.                 break;
  576.  
  577.         case MD_SAVEAS:
  578.                 {
  579.                 FileReqParams   frp;
  580.                 char                    *file;
  581.  
  582.                 frp.frp_Window      = curwin;
  583.                 frp.frp_Title       = getString(FILEREQ_SAVEAS_STRING);
  584.                 frp.frp_InitialFile = PrefsFile;
  585.                 frp.frp_Flag1       = FRF_DOSAVEMODE;
  586.  
  587.                 DisableYakInterface();
  588.                 EndNotify(&NotifyRequest);
  589.                 if (file=OpenFileRequester(&frp))
  590.                         {
  591.                         SaveSettings(file);
  592.                         if (CreateIcons)
  593.                                 {
  594.                                 struct DiskObject *dobj;
  595.  
  596.                                 /* Get project icon */
  597.                                 if (!(dobj=GetDiskObject("ENV:Sys/def_yak")))
  598.                                         dobj = GetDefDiskObject(WBPROJECT);
  599.  
  600.                                 if (dobj)
  601.                                         {
  602.                                         /* Set values */
  603.                                         dobj->do_DefaultTool = ProgramName;
  604.                                         dobj->do_Type        = WBPROJECT;
  605.  
  606.                                         /* Write icon */
  607.                                         PutDiskObject(file, dobj);
  608.  
  609.                                         /* Free icon */
  610.                                         FreeDiskObject(dobj);
  611.                                         }
  612.                                 }
  613.                         FreeVec(PrefsFile);
  614.                         PrefsFile = file;
  615.                         }
  616.                 StartNotify(&NotifyRequest);
  617.                 EnableYakInterface();
  618.                 }
  619.                 break;
  620.  
  621.         case MD_HIDE:
  622.         case WMHI_CLOSEWINDOW:
  623.                 HideInterface();
  624.                 break;
  625.  
  626.         case MD_ABOUT:
  627.                 DisableYakInterface();
  628.                 PostError(getString(About_Yak_STRING));
  629.                 EnableYakInterface();
  630.                 break;
  631.  
  632.         case MD_QUIT:
  633.                 ret   = RET_QUIT;
  634.                 break;
  635.  
  636.         case MD_DEFAULT:
  637.                 DisableYakInterface();
  638.                 SetDefaultSettings();
  639.                 InitRootGadgets();
  640.                 EnableYakInterface();
  641.                 break;
  642.  
  643.         case MD_LASTSAVED:
  644.                 DisableYakInterface();
  645.                 LoadSettings(ENVARC_CONFIG_FILE);
  646.                 InitRootGadgets();
  647.                 EnableYakInterface();
  648.                 break;
  649.  
  650.         case MD_ACTIVE:
  651.                 DisableYakInterface();
  652.                 LoadSettings(ENV_CONFIG_FILE);
  653.                 InitRootGadgets();
  654.                 EnableYakInterface();
  655.                 break;
  656.  
  657.         case MD_CREATEICONS:
  658.                 CreateIcons ^= TRUE;
  659.                 break;
  660.  
  661.         default:
  662.                 break;
  663.         }
  664.  
  665. return ret;
  666. }
  667.  
  668. /************************************************************************
  669. ***********************  SWITCHFROMROOTWINDOW()  ************************
  670. *************************************************************************
  671. * Switch from root window to the sub-window whose ID is supplied.
  672. * Returns TRUE or FALSE to indicate success.
  673. *
  674. *************************************************************************/
  675.  
  676. BOOL SwitchFromRootWindow(UBYTE WindowID)
  677. {
  678. CloseRootWindow();
  679. return(ShowWindowID(WindowID));
  680. }
  681.  
  682.